// newapi/machineRoutes.js
const express = require('express');
const router = express.Router();
const Machine = require('../../models/newmodels/machineSchema'); //机器信息文档

// 创建一个新的机器记录
// router.post('/machines', async (req, res) => {
//   try {
//     const machine = new Machine(req.body);
//     await machine.save();
//     res.status(201).send({ code: '201', msg: '机器信息插入成功', data: machine });
//   } catch (error) {
//     res.status(400).send({ code: '400', msg: '机器信息插入失败', data: error });
//   }
// });

// -------------------------创建模块--------------------------
// 输入个别字段创建机器记录页也可以实现创建数据
router.post('/machines', async (req, res) => {
  try {
    const { phone, machineModel, machineSource, locationNumber } = req.body;
    console.log(req.body);


    // 检查必填字段
    if (!phone || !machineModel || !machineSource) {
      return res.status(400).send({ code: '400', msg: '手机号、机器型号和机器来源类型为必填字段', data: null });
    }

    // 构建机器对象，使用默认值
    const machineData = {
      name: '无', // 姓名，默认为空字符串
      phone: phone,
      machineModel: machineModel,
      machineSource: machineSource,
      machineAttachments: '无', // 机器附件物品，默认为空字符串
      faultDescription: '无', // 故障问题，默认为空字符串
      status: '待处理', // 机器状态，默认为待处理
      trackingNumber: '无', // 快递单号，默认为空字符串
      notes: '', // 备注，默认为空字符串
      locationNumber: locationNumber,//定位号码
      createdAt: new Date(), // 创建时间，默认为当前时间
      updatedAt: new Date() // 修改的时间，默认为当前时间
    };

    // 如果请求体中有其他字段，则覆盖默认值
    if (req.body.name) machineData.name = req.body.name;
    if (req.body.machineAttachments) machineData.machineAttachments = req.body.machineAttachments;
    if (req.body.faultDescription) machineData.faultDescription = req.body.faultDescription;
    if (req.body.trackingNumber) machineData.trackingNumber = req.body.trackingNumber;
    if (req.body.notes) machineData.notes = req.body.notes;

    const machine = new Machine(machineData);
    await machine.save();

    res.status(201).send({ code: '201', msg: '机器信息插入成功', data: machine });
  } catch (error) {
    res.status(400).send({ code: '400', msg: '机器信息插入失败', data: error });
  }
});
// -------------------------查询模块--------------------------
// 获取所有机器记录
router.get('/machines', async (req, res) => {
  try {
    const machines = await Machine.find();
    res.status(200).send({ code: '200', msg: '查询数据成功', data: machines });
    console.log(machines);

  } catch (error) {
    res.status(500).send({ code: '500', msg: '查询数据失败', data: error });
  }
});

//接收传递机器状态信息返回数据。
router.get('/machines/stash', async (req, res) => {
  try {
    const { status } = req.query;
    console.log(status);

    if (!status) {
      return res.status(400).send({ code: '400', msg: '状态参数不能为空', data: null });
    }

    // 使用 status 参数进行查询
    const machines = await Machine.find({ status: status });

    res.status(200).send({ code: '200', msg: '查询数据成功', data: machines });
  } catch (error) {
    res.status(500).send({ code: '500', msg: '查询数据失败', data: error });
  }
});

// 模糊查询机器记录
router.get('/machines/search', async (req, res) => {
  console.log(req.query);

  try {
    const { keyword } = req.query;
    if (!keyword) {
      return res.status(400).send({ code: '400', msg: '关键词不能为空', data: null });
    }

    // 构建正则表达式
    const regex = new RegExp(keyword, 'i'); // 'i' 表示不区分大小写

    // 使用 $or 操作符进行多字段匹配
    const machines = await Machine.find({
      $or: [
        { name: regex }, //姓名
        { phone: regex },  //电话
        { machineModel: regex }, //机器型号
        { trackingNumber: { $regex: keyword, $options: 'i' } },// 假设 trackingNumber 是字符串类型
        { locationNumber: regex } //机器的定位号码
      ]
    });

    res.status(200).send({ code: '200', msg: '查询数据成功', data: machines });
  } catch (error) {
    res.status(500).send({ code: '500', msg: '查询数据失败', data: error });
  }
});


// -------------------------修改模块--------------------------


// 依据机器的状态修改
// --- 更新的值必须是，换一个新的值，否则会报错
router.put('/machines/updateStatus', async (req, res) => {
  try {
    const { _id, status } = req.body;
    console.log(req.body);
    // 检查必填字段
    if (!_id || !status) {
      return res.status(400).send({ code: '400', msg: '_id 和 status 为必填字段', data: null });
    }

    // 更新机器状态
    const machine = await Machine.findByIdAndUpdate(_id, { status }, { new: true, runValidators: true });

    if (!machine) {
      return res.status(404).send({ code: '404', msg: '没有找到该机器', data: null });
    }

    res.status(200).send({ code: '200', msg: '更新机器状态成功', data: machine });
    console.log(machine);

  } catch (error) {
    res.status(400).send({ code: '400', msg: '更新机器状态失败', data: error });
  }
});

//给添加一个保修的服务单号字段
router.put('/machines/maintenanceForm', async (req, res) => {
  try {
    const { _id, status, maintenanceForm } = req.body;
    console.log(req.body);
    // 检查必填字段
    if (!_id || !status) {
      return res.status(400).send({ code: '400', msg: '_id 和 status 为必填字段', data: null });
    }

    // 更新机器状态
    const machine = await Machine.findByIdAndUpdate(_id, { status, maintenanceForm }, { new: true, runValidators: true });

    if (!machine) {
      return res.status(404).send({ code: '404', msg: '没有找到该机器', data: null });
    }

    res.status(200).send({ code: '200', msg: '更新机器状态成功', data: machine });
    console.log(machine);

  } catch (error) {
    res.status(400).send({ code: '400', msg: '更新机器状态失败', data: error });
  }
});

//依据机器的ID，修改机器的服务单号
router.put('/machines/updateMaintenanceForm', async (req, res) => {
  try {
    const { _id, maintenanceForm } = req.body;
    console.log(req.body);
    // 检查必填字段
    // if (!_id || !maintenanceForm) {
    //   return res.status(400).send({ code: '400', msg: '_id 和 status 为必填字段', data: null });
    // }

    // 更新机器状态
    const machine = await Machine.findByIdAndUpdate(_id, { maintenanceForm }, { new: true, runValidators: true });

    if (!machine) {
      return res.status(404).send({ code: '404', msg: '没有找到该机器', data: null });
    }

    res.status(200).send({ code: '200', msg: '更新机器状态成功', data: machine });
    console.log(machine);

  } catch (error) {
    res.status(400).send({ code: '400', msg: '更新机器状态失败', data: error });
  }

});


//依据机器的ID，提交机器的密码和配置
router.put('/machines/updatePasswordAndConfiguration', async (req, res) => {
  try {
    const { _id, computerPassword, configuration } = req.body;
    console.log(req.body);

    // 更新机器状态
    const machine = await Machine.findByIdAndUpdate(_id, { computerPassword, configuration }, { new: true, runValidators: true });

    if (!machine) {
      return res.status(404).send({ code: '404', msg: '没有找到该机器', data: null });
    }

    res.status(200).send({ code: '200', msg: '更新机器状态成功', data: machine });
    console.log(machine);

  } catch (error) {
    res.status(400).send({ code: '400', msg: '更新机器状态失败', data: error });
  }

});

// -------------------------删除模块--------------------------


module.exports = router;